package pruebas;

import negModel.*;
import negModelExcep.eSinFondos;
import junit.framework.TestCase;
import java.util.Iterator;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class PersonajeJugadorTest extends TestCase {

	PersonajeJugador j;
	ListaVehiculos l2;
	ListaPartes l;
	
	Aleron aleron;
	Carroceria carroc;
	Combustible comb;
	Tanque tanque;
	ControladorDeCombustible controlador;
	Escape escape;
	Llanta llanta;
	Neumatico neum; 
	Rueda rueda; 
	Motor motor1,motor2;
	Transmision trans1,trans2; 
	Parte p;
	Auto auto;
	Element e;
			
	protected void setUp() throws Exception {
		super.setUp();
		
		l = new ListaPartes();
		l2 = new ListaVehiculos();
		
		aleron = new Aleron(1000,15,5,new String("Aleron"),new AlgoPesos(100),true,5,5,8,10);
		carroc = new Carroceria (100,500,3,new String("carr1"),new AlgoPesos(100),true,5,1,10,10,80,100);
		comb = new Combustible(88,88);
		tanque = new  Tanque(100,50,new String ("tanque"),new AlgoPesos(100),true,100,100,comb);
		tanque.cargarComb();
		controlador = new ControladorDeCombustible (1000,50,10,new String("Sistema de Inyeccion"),new AlgoPesos(100),true,10,7);
		escape = new Escape(100,20,70,new String("escape"),new AlgoPesos(100),true,100,8);
		llanta = new Llanta (100, 25,165,new String ("llanta1"),new AlgoPesos(100),false,10,0.05);
		neum = new Neumatico(100,20,150,new String ("neum"),new AlgoPesos(100),false,10,100,10,3);
		rueda = new Rueda(llanta,neum,new String ("rueda1"),false);
		motor1 = new Motor (1000,140,500,new String("Mot1"),new AlgoPesos(100),false,100,1000);
		motor2 = new Motor (1000,140,500,new String("Mot1"),new AlgoPesos(100),false,100,1000);
		trans1 = new Transmision(100,50,50,new String("trans"),new AlgoPesos(100),false,50,5,true);
		trans2 = new Transmision(100,50,50,new String("trans"),new AlgoPesos(100),false,50,5,true);
		
		
	
		l.add(aleron);
		l.add(carroc);
		l.add(tanque);
		l.add(controlador);
		l.add(escape);
		l.add(rueda);
		l.add(motor1);
		l.add(trans1);
		
				
		auto = new Auto(l,"auto");
		
		j = new PersonajeJugador(new String("Bruce Willis"),1000,auto);
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	    DocumentBuilder loader = factory.newDocumentBuilder();
	    Document doc = loader.newDocument();
	    
	    e= doc.createElement("personaje");
		e.setAttribute("Clase","jugador");
		
		e.setAttribute("nombre", j.getNombre());
		e.setAttribute("dinero", j.getDinero());
		
		ListaPartes lpu=new ListaPartes(), lpn=new ListaPartes();
		ListaVehiculos lv=new ListaVehiculos ();
		
		lv.add(auto);
		
	//	e.appendChild(auto.toXml(doc));
		e.appendChild(lv.toXml(doc,""));
		e.appendChild(lpu.toXml(doc,"U"));
		e.appendChild(lpn.toXml(doc,"N"));
		
	}

	public void testGetNombre() {
		assertEquals("Bruce Willis",j.getNombre());
	}

	public void testGetDinero() {
		assertEquals("1000.0",j.getDinero());
	}

	public void testPagar() {
		try {
			j.pagar(100);
		} catch (eSinFondos e) {
			e.printStackTrace();
		}
		assertEquals("900.0",j.getDinero());
		try {
			j.pagar(2000);
		} catch (eSinFondos e) {
			
		}
		assertEquals("900.0",j.getDinero());
	}

	public void testSumar() {
		j.sumar(100);
		assertEquals("1100.0",j.getDinero());
	}

	public void testAgregarParteNueva() {
		j.agregarParteNueva(aleron);
		ListaPartes ln = j.getPartesNuevas();
		assertEquals(true,ln.contains(aleron));
	}

	public void testAgregarParteUsada() {
		j.agregarParteUsada(motor1);
		ListaPartes lu = j.getPartesUsadas();
		assertEquals(true,lu.contains(motor1));
	}

	
	public void testGetVehiculo() {
		assertEquals(auto,j.getVehiculo());
	}
	
	public void testPersonajeJugador()throws Exception {
		
		PersonajeJugador j2=new PersonajeJugador(e);
				
		assertEquals(j2.getNombre(),e.getAttribute("nombre"));
		assertEquals(j2.getDinero(),e.getAttribute("dinero"));
		//assertNotNull(j2.getVehiculo());
		
		ListaPartes l=j2.getPartesNuevas();
		Iterator it=l.iterator();
		int cont1=0,cont2=0;
		while (it.hasNext()) {
			it.next();
			cont1++;
		}
		
		
		l=j.getPartesNuevas();
		it=l.iterator();
		while (it.hasNext()) {
			it.next();
			cont2++;
		}
		
		assertEquals(cont2,cont1);
		
		cont1=cont2=0;
		
		l=j2.getPartesUsadas();
		it=l.iterator();
		while (it.hasNext()) {
			it.next();
			cont1++;
		}
		
		l=j.getPartesUsadas();
		it=l.iterator();
		while (it.hasNext()) {
			it.next();
			cont2++;
		}
		
		assertEquals(cont2,cont1);
		
		cont1=cont2=0;
		
		l2=j2.mostrarVehiculos();
		it=l2.iterator();
		while (it.hasNext()) {
			it.next();
			cont1++;
		}
		
		l2=j.mostrarVehiculos();
		it=l2.iterator();
		while (it.hasNext()) {
			it.next();
			cont2++;
		}
		
		assertEquals(cont2,cont1);
		
				
	}

	public void testToXml () throws Exception {
	
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder loader = factory.newDocumentBuilder();
		Document doc = loader.newDocument();
	
		e=j.toXml(doc);
			
		assertEquals(j.getNombre(),e.getAttribute("nombre"));
		assertEquals(j.getDinero(),e.getAttribute("dinero"));
		
	
}

}
